/**
 * v-hasPermi 操作权限处理
 * Copyright (c) 2019 ruoyi
 */

import store from '@/store'

/**
 * 自定义指令 v-hasPermi，用于控制元素基于用户权限的显示
 */
export default {
  /**
   * 当被绑定元素插入到 DOM 中时执行
   * @param {Element} el - 被绑定的元素
   * @param {Object} binding - 包含指令相关数据的对象
   * @param {Object} vnode - 虚拟节点
   */
  inserted(el, binding, vnode) {
    // 获取指令的值
    const { value } = binding
    // 定义全权限标识
    const all_permission = "*:*:*";
    // 获取用户权限列表
    const permissions = store.getters && store.getters.permissions

    // 检查指令值是否为非空数组
    if (value && value instanceof Array && value.length > 0) {
      // 将指令值视为所需的权限标识列表
      const permissionFlag = value

      // 检查用户是否具有全权限或所需的特定权限
      const hasPermissions = permissions.some(permission => {
        return all_permission === permission || permissionFlag.includes(permission)
      })

      // 如果用户没有所需权限，从 DOM 中移除该元素
      if (!hasPermissions) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      // 如果指令值无效，抛出错误
      throw new Error(`请设置操作权限标签值`)
    }
  }
}
